/*
  Programa GEFE - Gestión de eventos lúdicos.
  Copyright (C) 2010  Antonio Ramírez Marti

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef FICHAACTIVIDAD_H
#define FICHAACTIVIDAD_H

#include <QObject>
#include <QTextDocument>
#include <QTextCursor>
#include <QPrinter>
#include <QTextDocumentWriter>
#include <QTextCharFormat>
#include <QTextTable>
#include <QTextTableCell>
#include <QTextTableCellFormat>
#include <QTextTableFormat>
#include <QSqlRecord>
#include <QString>
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QDate>

/*!
  Genera fichas de actividades, en formato PDF u ODF
  */

class FichaActividad : public QObject
{
Q_OBJECT
Q_PROPERTY (QString evento READ getEvento)
Q_ENUMS (FormatoSalida)

public:
    explicit FichaActividad(QObject *parent = 0,QString nEvento=QString());

    /*!
      Devuelve el nombre del evento
      */

    QString getEvento() const;

    /*!
      Formatos de salida
      */

    enum FormatoSalida
    {
        PDF,ODT
    };

signals:

public slots:

    /*!
      Conecta el generador de fichas
      */

    void conecta(bool estado);

    /*!
      Genera la ficha de actividad y la muestra para visualizarla antes de guardarla
      @param actividad  Datos de la actividad
      */

    void generaFichaActividad(QSqlRecord actividad);

    /*!
      Genera las fichas de actividades de una busqueda
      @param actividades    Sentencia SQL con las actividades seleccionadas
      */

    void generaFichasSeleccionadas(QSqlQuery listaActividades,QString directorio);

    /*!
      Genera la ficha de una sala
      @param listaActividades   Lista de actividades de la sala
      @param sala   Nombre de la sala
      @param directorio Directorio de salida del informe
      */

    void generaFichaSala(QSqlQuery listaActividades,QString sala,QString directorio);

private:

    QString evento;                 ///< Nombre del evento
    QDate inicio;                   ///< Fecha de inicio
    QDate fin;                      ///< Fecha de fin

    QTextDocument *documento;       ///< Documento donde escribir y volcar la actividad de forma intermedia
    QTextCursor *cursor;            ///< Cursor de posicionamiento sobre el documento


    QTextCharFormat textoCabecera;    ///< Texto de cabecera
    QTextCharFormat textoNormal;     ///< Texto normal



    /*!
      Prepara el objeto
      */

    void setup();

    /*!
      Borra el documento y el cursor asociado
      */

    void clean();

    /*!
      Prepara el documento para generar la ficha de actividad
      */

    void preparaDocumento();

    /*!
      Genera la cabecera de la actividad
      */

    void generaCabecera(QSqlRecord act);

    /*!
      Genera el horario de la actividad
      */

    void generaHorario(QSqlRecord act);

    /*!
      Salva el archivo en modo PDF
      */

    void mostrarFicha(QSqlRecord act);

    /*!
      Genera la descripcion de la actividad.
      */

    void generaDescripcion(QSqlRecord act);

    /*!
      Genera la lista de participantes
      */

    void generaParticipantes(QSqlRecord act);

    /*!
      Genera el nombre de la sala
      */

    void generaNombreSala(QString nombre);

    /*!
      Genera una entrada en la tabla de la sala actual
      */

    void generaActividadEnSala(QSqlRecord act);

    /*!
      Guarda la actividad con un nombre concreto
      @param nombreArchivo Nombre del archivo
      @param formato    Formato del archivo
      */

    void saveFicha(QString nombreArchivo,FormatoSalida formato);

};

#endif // FICHAACTIVIDAD_H
